package com.syh.jn.scm.dto.downstream.logistics;

import lombok.Data;

import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * Created by soci.song on 2018/11/2.
 */
@Data
public class DownLogisticsBillMto implements Serializable {

    @NotNull(message = "物流单据ID不能为空")
    private Long id;
    /**
     * 物流类型(1:空运 2:陆运 3:海运)
     */
    @NotNull(message = "物流类型不能为空")
    private Short logisticsType;
    /**
     * 物流公司id
     */
    private Long logisticsCompanyId;
    /**
     * 航班号
     */
    private String flightNumber;
    /**
     * 海航号
     */
    private String shippingNumber;
    /**
     * 货车车牌号
     */
    private String plateNumber;
    /**
     * 预计到达时间(物流)
     */
    private Long etaDateTimestamp;
    /**
     * 司机姓名
     */
    private String driverName;
    /**
     * 司机联系电话
     */
    private String driverContactPhone;
    /**
     * 发货备注(物流)
     */
    private String deliveryNotes;
    /**
     * 发货地区编码
     */
    @NotNull(message = "发货地区编码不能为空")
    private String deliveryDeliAreaCode;
    /**
     * 发货地址省 市 区
     */
    @NotNull(message = "发货地址不能为空")
    private String deliveryDeliArea;
    /**
     * 发货人详细地址
     */
    @NotNull(message = "发货人详细地址不能为空")
    private String deliveryDeliAddress;
    /**
     * 运费金额
     */
    @NotNull(message = "运费金额不能为空")
    @DecimalMin(value = "0",message = "运费金额必须大于0")
    private BigDecimal totalFreight;
    /**
     * 收货人姓名
     */
    @NotNull(message = "收货人姓名不能为空")
    private String deliName;
    /**
     * 收货人联系电话
     */
    @NotNull(message = "收货人联系电话不能为空")
    private String deliTel;
    /**
     * 收货地区编码
     */
    @NotNull(message = "收货地区编码不能为空")
    private String deliAreaCode;
    /**
     * 收货地址省 市 区
     */
    @NotNull(message = "收货地址不能为空")
    private String deliArea;
    /**
     * 收货人详细地址
     */
    @NotNull(message = "收货人详细地址不能为空")
    private String deliAddress;
    /**
     * 要求到货时间
     */
    private Long receiveTimestamp;

    /**
     * 物流单项
     */
    private List<DownLogisticsBillItemMto> items;

    @Data
    public class DownLogisticsBillItemMto implements Serializable{
        /**
         * id
         */
        protected Long id;
        /**
         * 对应订单ITEMId
         */
        @NotNull(message = "对应订单项id不能为空")
        private Long orderItemId;
        /**
         * 订单类型
         */
        private Short orderType;
        /**
         * 物流单ID
         */
        @NotNull(message = "物流单id不能为空")
        private Long logisticsBillId;
        /**
         * 商品id
         */
        @NotNull(message = "商品id不能为空")
        private Long goodsId;
        /**
         * 商品编码
         */
        private String goodsCode;
        /**
         * 商品名称
         */
        private String goodsName;
        /**
         *商品数量
         */
        @NotNull(message = "商品数量不能为空")
        @DecimalMin(value = "0",message = "商品数量必须大于0")
        private BigDecimal quantity;
        /**
         *单位
         */
        private String units;
    }
}
